// ┌────────────────────────────────────────────────────────────────────┐ \\
// │ F R E E B O A R D                                                  │ \\
// ├────────────────────────────────────────────────────────────────────┤ \\
// │ Copyright © 2013 Jim Heising (https://github.com/jheising)         │ \\
// │ Copyright © 2013 Bug Labs, Inc. (http://buglabs.net)               │ \\
// ├────────────────────────────────────────────────────────────────────┤ \\
// │ Licensed under the MIT license.                                    │ \\
// └────────────────────────────────────────────────────────────────────┘ \\

(function () {
    var jsonAlarmDataSource = function (settings, updateCallback) {
        var self = this;
        var updateTimer = null;
        var currentSettings = settings;
        var errorStage = 0; 	// 0 =尝试标准请求
        // 1 =尝试JSONP
        // 2 =尝试thingproxy.freeboard.io
        var lockErrorStage = false;

        function updateRefresh(refreshTime) {
            if (updateTimer) {
                clearInterval(updateTimer);
            }
            updateTimer = setInterval(function () {
                self.updateNow();
            }, refreshTime);
        }

        updateRefresh(currentSettings.refresh * 1000);
        this.updateNow = function () {
            if ((errorStage > 1 && !currentSettings.use_thingproxy) || errorStage > 2) // We've tried everything, let's quit
            {
                return; // TODO: Report an error
            }
            var requestURL = currentSettings.url;

            //获取所有allcookies
            var allcookies = document.cookie;
            var arr = new Array();
            var access_token = window.sessionStorage.getItem('access_token');
            // "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/warninginfrecord"
            // console.log('requestURL:', requestURL)
            $.ajax({
                async: false,
                url: "http://192.168.40.4:8181" + requestURL,
                // url: "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/waringLevels/getWaringLevelValue",
                dataType: "JSON",
                type: "GET",
                headers: {'access_token': access_token},
                // beforeSend: function(request) {
                //     request.setRequestHeader('access_token', access_token);
                // },
                success: function (data) {
                    // console.log('data:',data)
                    // window.jsondata = data
                    // var s = replace(data)
                    // console.log('s:',s)
                    var obj = JSON.parse(data);
                    updateCallback(obj);//回调函数
                },
                error: function (xhr, status, error) {
                    if (!lockErrorStage) {
                        // TODO: Figure out a way to intercept CORS errors only. The error message for CORS errors seems to be a standard 404.
                        errorStage++;
                        self.updateNow();
                    }
                }
            });
        }

        function replace(a) {
            return a.replace(/'/g, '"')
        }

        this.onDispose = function () {
            clearInterval(updateTimer);
            updateTimer = null;
        }

        this.onSettingsChanged = function (newSettings) {
            lockErrorStage = false;
            errorStage = 0;

            currentSettings = newSettings;
            updateRefresh(currentSettings.refresh * 1000);
            self.updateNow();
        }
    };
    //加载告警5个级别数据源插件
    freeboard.loadDatasourcePlugin({
        // ** type_name **（必填）：此插件的唯一名称。此名称应尽可能唯一，以避免与其他插件发生冲突，并应遵循javascript变量和函数声明的命名约定。
        type_name: "5个级别告警",
        settings: [
            {
                name: "url",
                display_name: "路径",
                // ** type **（必需）：此设置的预期输入类型。“text”将显示单个文本框输入。本文档中将包含其他类型的示例。
                type: "text"
            },
            {
                // ** name **（必填）：设置的名称。此值将在您的代码中用于检索用户指定的值。这应该遵循javascript变量和函数声明的命名约定。
                name: "use_thingproxy",
                // ** display_name **：调整此设置时将向用户显示的漂亮名称。
                display_name: "尝试代理",
                // ** description **：将在设置下方显示的文本，为用户提供任何额外信息。
                description: '首先将尝试直接JSON连接，如果失败，将尝试JSONP连接。如果失败，您可以使用thigPosiver，它可以解决API的许多连接问题。 <a href="https://github.com/Freeboard/thingproxy" target="_blank">更多信息</a>.',
                // ** type **（必需）：此设置的预期输入类型
                type: "boolean",
                // ** default_value **：此设置的默认值。
                default_value: true
            },
            {
                name: "refresh",
                display_name: "刷新时间",
                type: "number",
                // ** suffix **：后缀。
                suffix: "seconds",
                default_value: 5
            },
            {
                name: "method",
                display_name: "请求方式",
                // ** type **（必需）：option代表这是一个下拉选
                type: "option",
                options: [
                    {
                        name: "GET",
                        value: "GET"
                    },
                    {
                        name: "POST",
                        value: "POST"
                    },
                    {
                        name: "PUT",
                        value: "PUT"
                    },
                    {
                        name: "DELETE",
                        value: "DELETE"
                    }
                ]
            },
            {
                name: "body",
                display_name: "请求主体",
                type: "text",
                description: "请求的主体，通常只使用 POST"
            },
            {
                name: "headers",
                display_name: "请求首部",
                // ** type **（必需）：array代表这是一个数组
                type: "array",
                settings: [
                    {
                        name: "name",
                        display_name: "Name",
                        type: "text"
                    },
                    {
                        name: "value",
                        display_name: "Value",
                        type: "text"
                    }
                ]
            }
        ],

        newInstance: function (settings, newInstanceCallback, updateCallback) {
            newInstanceCallback(new jsonAlarmDataSource(settings, updateCallback));
        }
    });

    var jsonLineFlowDataSource = function (settings, updateCallback) {
        var self = this;
        var updateTimer = null;
        var currentSettings = settings;
        var errorStage = 0; 	// 0 =尝试标准请求
        // 1 =尝试JSONP
        // 2 =尝试thingproxy.freeboard.io
        var lockErrorStage = false;

        function updateRefresh(refreshTime) {
            if (updateTimer) {
                clearInterval(updateTimer);
            }
            updateTimer = setInterval(function () {
                self.updateNow();
            }, refreshTime);
        }

        updateRefresh(currentSettings.refresh * 1000);
        this.updateNow = function () {
            if ((errorStage > 1 && !currentSettings.use_thingproxy) || errorStage > 2) // We've tried everything, let's quit
            {
                return; // TODO: Report an error
            }
            var requestURL = currentSettings.url;

            //获取所有allcookies
            var allcookies = document.cookie;
            var arr = new Array();
            var access_token = window.sessionStorage.getItem('access_token');
            // "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/warninginfrecord"
            // console.log('requestURL:', requestURL)
            $.ajax({
                async: false,
                url: "http://192.168.40.3:8181" + requestURL,
                // url: "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/lineTotalFlows/getLineTotalFlowValue",
                dataType: "JSON",
                type: "GET",
                headers: {'access_token': access_token},
                // beforeSend: function(request) {
                //     request.setRequestHeader('access_token', access_token);
                // },
                success: function (data) {
                    // console.log('data:', data)
                    // window.jsondata = data
                    // var s = replace(data)
                    // console.log('s:',s)
                    var obj = JSON.parse(data);
                    // console.log(obj)
                    updateCallback(obj);//回调函数
                },
                error: function (xhr, status, error) {
                    if (!lockErrorStage) {
                        // TODO: Figure out a way to intercept CORS errors only. The error message for CORS errors seems to be a standard 404.
                        errorStage++;
                        self.updateNow();
                    }
                }
            });
        }

        function replace(a) {
            return a.replace(/'/g, '"')
        }

        this.onDispose = function () {
            clearInterval(updateTimer);
            updateTimer = null;
        }

        this.onSettingsChanged = function (newSettings) {
            lockErrorStage = false;
            errorStage = 0;

            currentSettings = newSettings;
            updateRefresh(currentSettings.refresh * 1000);
            self.updateNow();
        }
    };
    //加载线路总流量TOP数据源插件
    freeboard.loadDatasourcePlugin({
        // ** type_name **（必填）：此插件的唯一名称。此名称应尽可能唯一，以避免与其他插件发生冲突，并应遵循javascript变量和函数声明的命名约定。
        type_name: "线路总流量TOP",
        settings: [
            {
                name: "url",
                display_name: "路径",
                // ** type **（必需）：此设置的预期输入类型。“text”将显示单个文本框输入。本文档中将包含其他类型的示例。
                type: "text"
            },
            {
                // ** name **（必填）：设置的名称。此值将在您的代码中用于检索用户指定的值。这应该遵循javascript变量和函数声明的命名约定。
                name: "use_thingproxy",
                // ** display_name **：调整此设置时将向用户显示的漂亮名称。
                display_name: "尝试代理",
                // ** description **：将在设置下方显示的文本，为用户提供任何额外信息。
                description: '首先将尝试直接JSON连接，如果失败，将尝试JSONP连接。如果失败，您可以使用thigPosiver，它可以解决API的许多连接问题。 <a href="https://github.com/Freeboard/thingproxy" target="_blank">更多信息</a>.',
                // ** type **（必需）：此设置的预期输入类型
                type: "boolean",
                // ** default_value **：此设置的默认值。
                default_value: true
            },
            {
                name: "refresh",
                display_name: "刷新时间",
                type: "number",
                // ** suffix **：后缀。
                suffix: "seconds",
                default_value: 5
            },
            {
                name: "method",
                display_name: "请求方式",
                // ** type **（必需）：option代表这是一个下拉选
                type: "option",
                options: [
                    {
                        name: "GET",
                        value: "GET"
                    },
                    {
                        name: "POST",
                        value: "POST"
                    },
                    {
                        name: "PUT",
                        value: "PUT"
                    },
                    {
                        name: "DELETE",
                        value: "DELETE"
                    }
                ]
            },
            {
                name: "body",
                display_name: "请求主体",
                type: "text",
                description: "请求的主体，通常只使用 POST"
            },
            {
                name: "headers",
                display_name: "请求首部",
                // ** type **（必需）：array代表这是一个数组
                type: "array",
                settings: [
                    {
                        name: "name",
                        display_name: "Name",
                        type: "text"
                    },
                    {
                        name: "value",
                        display_name: "Value",
                        type: "text"
                    }
                ]
            }
        ],

        newInstance: function (settings, newInstanceCallback, updateCallback) {
            newInstanceCallback(new jsonLineFlowDataSource(settings, updateCallback));
        }
    });

    var jsonRAMDataSource = function (settings, updateCallback) {
        var self = this;
        var updateTimer = null;
        var currentSettings = settings;
        var errorStage = 0; 	// 0 =尝试标准请求
        // 1 =尝试JSONP
        // 2 =尝试thingproxy.freeboard.io
        var lockErrorStage = false;

        function updateRefresh(refreshTime) {
            if (updateTimer) {
                clearInterval(updateTimer);
            }
            updateTimer = setInterval(function () {
                self.updateNow();
            }, refreshTime);
        }

        updateRefresh(currentSettings.refresh * 1000);
        this.updateNow = function () {
            if ((errorStage > 1 && !currentSettings.use_thingproxy) || errorStage > 2) // We've tried everything, let's quit
            {
                return; // TODO: Report an error
            }
            var requestURL = currentSettings.url;

            //获取所有allcookies
            var allcookies = document.cookie;
            var arr = new Array();
            var access_token = window.sessionStorage.getItem('access_token');
            // "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/warninginfrecord"
            // console.log('requestURL:', requestURL)
            $.ajax({
                async: false,
                url: "http://192.168.40.3:8181" + requestURL,
                // url: "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/networkDeviceMemorys/getNetworkDeviceMemoryValue",
                dataType: "JSON",
                type: "GET",
                headers: {'access_token': access_token},
                // beforeSend: function(request) {
                //     request.setRequestHeader('access_token', access_token);
                // },
                success: function (data) {
                    // console.log('data:', data)
                    var str = data
                    str = str.substring(0, str.lastIndexOf(',')) + '}'
                    // window.jsondata = data
                    // var s = replace(data)
                    // console.log('s:',s)
                    var obj = JSON.parse(str);
                    // console.log(obj)
                    updateCallback(obj);//回调函数
                },
                error: function (xhr, status, error) {
                    if (!lockErrorStage) {
                        // TODO: Figure out a way to intercept CORS errors only. The error message for CORS errors seems to be a standard 404.
                        errorStage++;
                        self.updateNow();
                    }
                }
            });
        }

        function replace(a) {
            return a.replace(/'/g, '"')
        }

        this.onDispose = function () {
            clearInterval(updateTimer);
            updateTimer = null;
        }

        this.onSettingsChanged = function (newSettings) {
            lockErrorStage = false;
            errorStage = 0;

            currentSettings = newSettings;
            updateRefresh(currentSettings.refresh * 1000);
            self.updateNow();
        }
    };
    //加载网络设备内存TOP及网络设备内存昨日增长量数据源插件
    freeboard.loadDatasourcePlugin({
        // ** type_name **（必填）：此插件的唯一名称。此名称应尽可能唯一，以避免与其他插件发生冲突，并应遵循javascript变量和函数声明的命名约定。
        type_name: "网络设备内存TOP及网络设备内存昨日增长量",
        settings: [
            {
                name: "url",
                display_name: "路径",
                // ** type **（必需）：此设置的预期输入类型。“text”将显示单个文本框输入。本文档中将包含其他类型的示例。
                type: "text"
            },
            {
                // ** name **（必填）：设置的名称。此值将在您的代码中用于检索用户指定的值。这应该遵循javascript变量和函数声明的命名约定。
                name: "use_thingproxy",
                // ** display_name **：调整此设置时将向用户显示的漂亮名称。
                display_name: "尝试代理",
                // ** description **：将在设置下方显示的文本，为用户提供任何额外信息。
                description: '首先将尝试直接JSON连接，如果失败，将尝试JSONP连接。如果失败，您可以使用thigPosiver，它可以解决API的许多连接问题。 <a href="https://github.com/Freeboard/thingproxy" target="_blank">更多信息</a>.',
                // ** type **（必需）：此设置的预期输入类型
                type: "boolean",
                // ** default_value **：此设置的默认值。
                default_value: true
            },
            {
                name: "refresh",
                display_name: "刷新时间",
                type: "number",
                // ** suffix **：后缀。
                suffix: "seconds",
                default_value: 5
            },
            {
                name: "method",
                display_name: "请求方式",
                // ** type **（必需）：option代表这是一个下拉选
                type: "option",
                options: [
                    {
                        name: "GET",
                        value: "GET"
                    },
                    {
                        name: "POST",
                        value: "POST"
                    },
                    {
                        name: "PUT",
                        value: "PUT"
                    },
                    {
                        name: "DELETE",
                        value: "DELETE"
                    }
                ]
            },
            {
                name: "body",
                display_name: "请求主体",
                type: "text",
                description: "请求的主体，通常只使用 POST"
            },
            {
                name: "headers",
                display_name: "请求首部",
                // ** type **（必需）：array代表这是一个数组
                type: "array",
                settings: [
                    {
                        name: "name",
                        display_name: "Name",
                        type: "text"
                    },
                    {
                        name: "value",
                        display_name: "Value",
                        type: "text"
                    }
                ]
            }
        ],

        newInstance: function (settings, newInstanceCallback, updateCallback) {
            newInstanceCallback(new jsonRAMDataSource(settings, updateCallback));
        }
    });

    var jsonScaleDataSource = function (settings, updateCallback) {
        var self = this;
        var updateTimer = null;
        var currentSettings = settings;
        var errorStage = 0; 	// 0 =尝试标准请求
        // 1 =尝试JSONP
        // 2 =尝试thingproxy.freeboard.io
        var lockErrorStage = false;

        function updateRefresh(refreshTime) {
            if (updateTimer) {
                clearInterval(updateTimer);
            }
            updateTimer = setInterval(function () {
                self.updateNow();
            }, refreshTime);
        }

        updateRefresh(currentSettings.refresh * 1000);
        this.updateNow = function () {
            if ((errorStage > 1 && !currentSettings.use_thingproxy) || errorStage > 2) // We've tried everything, let's quit
            {
                return; // TODO: Report an error
            }
            var requestURL = currentSettings.url;

            //获取所有allcookies
            var allcookies = document.cookie;
            var arr = new Array();
            var access_token = window.sessionStorage.getItem('access_token');
            // console.log('requestURL:', requestURL)
            $.ajax({
                async: false,
                url: "http://192.168.40.3:8181" + requestURL,
                // url: "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/linechartrequest/getLineChartRequestValue",
                dataType: "JSON",
                type: "GET",
                headers: {'access_token': access_token},
                // beforeSend: function(request) {
                //     request.setRequestHeader('access_token', access_token);
                // },
                success: function (data) {
                    // console.log('data:', data)
                    // var str = data
                    // str = str.substring(0, str.lastIndexOf(',')) + '}'
                    // window.jsondata = data
                    // var s = replace(data)
                    // console.log('s:',s)
                    var obj = JSON.parse(data);
                    // console.log(obj)
                    updateCallback(obj);//回调函数
                },
                error: function (xhr, status, error) {
                    if (!lockErrorStage) {
                        // TODO: Figure out a way to intercept CORS errors only. The error message for CORS errors seems to be a standard 404.
                        errorStage++;
                        self.updateNow();
                    }
                }
            });
        }

        function replace(a) {
            return a.replace(/'/g, '"')
        }

        this.onDispose = function () {
            clearInterval(updateTimer);
            updateTimer = null;
        }

        this.onSettingsChanged = function (newSettings) {
            lockErrorStage = false;
            errorStage = 0;

            currentSettings = newSettings;
            updateRefresh(currentSettings.refresh * 1000);
            self.updateNow();
        }
    };
    //加载专线宽带占用比数据源插件
    freeboard.loadDatasourcePlugin({
        // ** type_name **（必填）：此插件的唯一名称。此名称应尽可能唯一，以避免与其他插件发生冲突，并应遵循javascript变量和函数声明的命名约定。
        type_name: "专线宽带占用比",
        settings: [
            {
                name: "url",
                display_name: "路径",
                // ** type **（必需）：此设置的预期输入类型。“text”将显示单个文本框输入。本文档中将包含其他类型的示例。
                type: "text"
            },
            {
                // ** name **（必填）：设置的名称。此值将在您的代码中用于检索用户指定的值。这应该遵循javascript变量和函数声明的命名约定。
                name: "use_thingproxy",
                // ** display_name **：调整此设置时将向用户显示的漂亮名称。
                display_name: "尝试代理",
                // ** description **：将在设置下方显示的文本，为用户提供任何额外信息。
                description: '首先将尝试直接JSON连接，如果失败，将尝试JSONP连接。如果失败，您可以使用thigPosiver，它可以解决API的许多连接问题。 <a href="https://github.com/Freeboard/thingproxy" target="_blank">更多信息</a>.',
                // ** type **（必需）：此设置的预期输入类型
                type: "boolean",
                // ** default_value **：此设置的默认值。
                default_value: true
            },
            {
                name: "refresh",
                display_name: "刷新时间",
                type: "number",
                // ** suffix **：后缀。
                suffix: "seconds",
                default_value: 5
            },
            {
                name: "method",
                display_name: "请求方式",
                // ** type **（必需）：option代表这是一个下拉选
                type: "option",
                options: [
                    {
                        name: "GET",
                        value: "GET"
                    },
                    {
                        name: "POST",
                        value: "POST"
                    },
                    {
                        name: "PUT",
                        value: "PUT"
                    },
                    {
                        name: "DELETE",
                        value: "DELETE"
                    }
                ]
            },
            {
                name: "body",
                display_name: "请求主体",
                type: "text",
                description: "请求的主体，通常只使用 POST"
            },
            {
                name: "headers",
                display_name: "请求首部",
                // ** type **（必需）：array代表这是一个数组
                type: "array",
                settings: [
                    {
                        name: "name",
                        display_name: "Name",
                        type: "text"
                    },
                    {
                        name: "value",
                        display_name: "Value",
                        type: "text"
                    }
                ]
            }
        ],

        newInstance: function (settings, newInstanceCallback, updateCallback) {
            newInstanceCallback(new jsonScaleDataSource(settings, updateCallback));
        }
    });

    var jsonReportFlowDataSource = function (settings, updateCallback) {
        var self = this;
        var updateTimer = null;
        var currentSettings = settings;
        var errorStage = 0; 	// 0 =尝试标准请求
        // 1 =尝试JSONP
        // 2 =尝试thingproxy.freeboard.io
        var lockErrorStage = false;

        function updateRefresh(refreshTime) {
            if (updateTimer) {
                clearInterval(updateTimer);
            }
            updateTimer = setInterval(function () {
                self.updateNow();
            }, refreshTime);
        }

        updateRefresh(currentSettings.refresh * 1000);
        this.updateNow = function () {
            if ((errorStage > 1 && !currentSettings.use_thingproxy) || errorStage > 2) // We've tried everything, let's quit
            {
                return; // TODO: Report an error
            }
            var requestURL = currentSettings.url;

            //获取所有allcookies
            var allcookies = document.cookie;
            var arr = new Array();
            var access_token = window.sessionStorage.getItem('access_token');
            // "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/warninginfrecord"
            // console.log('requestURL:', requestURL)
            $.ajax({
                async: false,
                url: "http://192.168.40.3:8181" + requestURL,
                // url: "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/waringLists/getWaringListValue",
                dataType: "JSON",
                type: "GET",
                headers: {'access_token': access_token},
                // beforeSend: function(request) {
                //     request.setRequestHeader('access_token', access_token);
                // },
                success: function (data) {
                    var obj = JSON.parse(data);
                    // console.log(obj)
                    updateCallback(obj);//回调函数
                },
                error: function (xhr, status, error) {
                    if (!lockErrorStage) {
                        // TODO: Figure out a way to intercept CORS errors only. The error message for CORS errors seems to be a standard 404.
                        errorStage++;
                        self.updateNow();
                    }
                }
            });
        }

        function replace(a) {
            return a.replace(/'/g, '"')
        }

        this.onDispose = function () {
            clearInterval(updateTimer);
            updateTimer = null;
        }

        this.onSettingsChanged = function (newSettings) {
            lockErrorStage = false;
            errorStage = 0;

            currentSettings = newSettings;
            updateRefresh(currentSettings.refresh * 1000);
            self.updateNow();
        }
    };
    //警告列表轮播
    freeboard.loadDatasourcePlugin({
        // ** type_name **（必填）：此插件的唯一名称。此名称应尽可能唯一，以避免与其他插件发生冲突，并应遵循javascript变量和函数声明的命名约定。
        type_name: "告警列表轮播",
        settings: [
            {
                name: "url",
                display_name: "路径",
                // ** type **（必需）：此设置的预期输入类型。“text”将显示单个文本框输入。本文档中将包含其他类型的示例。
                type: "text"
            },
            {
                // ** name **（必填）：设置的名称。此值将在您的代码中用于检索用户指定的值。这应该遵循javascript变量和函数声明的命名约定。
                name: "use_thingproxy",
                // ** display_name **：调整此设置时将向用户显示的漂亮名称。
                display_name: "尝试代理",
                // ** description **：将在设置下方显示的文本，为用户提供任何额外信息。
                description: '首先将尝试直接JSON连接，如果失败，将尝试JSONP连接。如果失败，您可以使用thigPosiver，它可以解决API的许多连接问题。 <a href="https://github.com/Freeboard/thingproxy" target="_blank">更多信息</a>.',
                // ** type **（必需）：此设置的预期输入类型
                type: "boolean",
                // ** default_value **：此设置的默认值。
                default_value: true
            },
            {
                name: "refresh",
                display_name: "刷新时间",
                type: "number",
                // ** suffix **：后缀。
                suffix: "seconds",
                default_value: 5
            },
            {
                name: "method",
                display_name: "请求方式",
                // ** type **（必需）：option代表这是一个下拉选
                type: "option",
                options: [
                    {
                        name: "GET",
                        value: "GET"
                    },
                    {
                        name: "POST",
                        value: "POST"
                    },
                    {
                        name: "PUT",
                        value: "PUT"
                    },
                    {
                        name: "DELETE",
                        value: "DELETE"
                    }
                ]
            },
            {
                name: "body",
                display_name: "请求主体",
                type: "text",
                description: "请求的主体，通常只使用 POST"
            },
            {
                name: "headers",
                display_name: "请求首部",
                // ** type **（必需）：array代表这是一个数组
                type: "array",
                settings: [
                    {
                        name: "name",
                        display_name: "Name",
                        type: "text"
                    },
                    {
                        name: "value",
                        display_name: "Value",
                        type: "text"
                    }
                ]
            }
        ],

        newInstance: function (settings, newInstanceCallback, updateCallback) {
            newInstanceCallback(new jsonReportFlowDataSource(settings, updateCallback));
        }
    });

    var jsonAllFacilityList = function (settings, updateCallback) {
        var self = this;
        var updateTimer = null;
        var currentSettings = settings;
        var errorStage = 0; 	// 0 =尝试标准请求
        // 1 =尝试JSONP
        // 2 =尝试thingproxy.freeboard.io
        var lockErrorStage = false;

        function updateRefresh(refreshTime) {
            if (updateTimer) {
                clearInterval(updateTimer);
            }
            updateTimer = setInterval(function () {
                self.updateNow();
            }, refreshTime);
        }

        updateRefresh(currentSettings.refresh * 1000);
        this.updateNow = function () {
            if ((errorStage > 1 && !currentSettings.use_thingproxy) || errorStage > 2) // We've tried everything, let's quit
            {
                return; // TODO: Report an error
            }
            var requestURL = currentSettings.url;

            //获取所有allcookies
            var allcookies = document.cookie;
            var arr = new Array();
            var access_token = window.sessionStorage.getItem('access_token');
            // "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/allNetworkDeviceLists/getAllNetworkDeviceListValue"
            // console.log('requestURL:', requestURL)
            $.ajax({
                async: false,
                url: "http://192.168.40.3:8181" + requestURL,
                // url: "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/allNetworkDeviceLists/getAllNetworkDeviceListValue",
                dataType: "JSON",
                type: "GET",
                headers: {'access_token': access_token},
                // beforeSend: function(request) {
                //     request.setRequestHeader('access_token', access_token);
                // },
                success: function (data) {
                    var obj = JSON.parse(data);
                    updateCallback(obj);//回调函数
                    // console.log(obj)
                },
                error: function (xhr, status, error) {
                    if (!lockErrorStage) {
                        // TODO: Figure out a way to intercept CORS errors only. The error message for CORS errors seems to be a standard 404.
                        errorStage++;
                        self.updateNow();
                    }
                }
            });
        }

        function replace(a) {
            return a.replace(/'/g, '"')
        }

        this.onDispose = function () {
            clearInterval(updateTimer);
            updateTimer = null;
        }

        this.onSettingsChanged = function (newSettings) {
            lockErrorStage = false;
            errorStage = 0;

            currentSettings = newSettings;
            updateRefresh(currentSettings.refresh * 1000);
            self.updateNow();
        }
    };
    //所有网络设备列表
    freeboard.loadDatasourcePlugin({
        // ** type_name **（必填）：此插件的唯一名称。此名称应尽可能唯一，以避免与其他插件发生冲突，并应遵循javascript变量和函数声明的命名约定。
        type_name: "所有网络设备列表",
        settings: [
            {
                name: "url",
                display_name: "路径",
                // ** type **（必需）：此设置的预期输入类型。“text”将显示单个文本框输入。本文档中将包含其他类型的示例。
                type: "text"
            },
            {
                // ** name **（必填）：设置的名称。此值将在您的代码中用于检索用户指定的值。这应该遵循javascript变量和函数声明的命名约定。
                name: "use_thingproxy",
                // ** display_name **：调整此设置时将向用户显示的漂亮名称。
                display_name: "尝试代理",
                // ** description **：将在设置下方显示的文本，为用户提供任何额外信息。
                description: '首先将尝试直接JSON连接，如果失败，将尝试JSONP连接。如果失败，您可以使用thigPosiver，它可以解决API的许多连接问题。 <a href="https://github.com/Freeboard/thingproxy" target="_blank">更多信息</a>.',
                // ** type **（必需）：此设置的预期输入类型
                type: "boolean",
                // ** default_value **：此设置的默认值。
                default_value: true
            },
            {
                name: "refresh",
                display_name: "刷新时间",
                type: "number",
                // ** suffix **：后缀。
                suffix: "seconds",
                default_value: 5
            },
            {
                name: "method",
                display_name: "请求方式",
                // ** type **（必需）：option代表这是一个下拉选
                type: "option",
                options: [
                    {
                        name: "GET",
                        value: "GET"
                    },
                    {
                        name: "POST",
                        value: "POST"
                    },
                    {
                        name: "PUT",
                        value: "PUT"
                    },
                    {
                        name: "DELETE",
                        value: "DELETE"
                    }
                ]
            },
            {
                name: "body",
                display_name: "请求主体",
                type: "text",
                description: "请求的主体，通常只使用 POST"
            },
            {
                name: "headers",
                display_name: "请求首部",
                // ** type **（必需）：array代表这是一个数组
                type: "array",
                settings: [
                    {
                        name: "name",
                        display_name: "Name",
                        type: "text"
                    },
                    {
                        name: "value",
                        display_name: "Value",
                        type: "text"
                    }
                ]
            }
        ],

        newInstance: function (settings, newInstanceCallback, updateCallback) {
            newInstanceCallback(new jsonAllFacilityList(settings, updateCallback));
        }
    });

    var jsonTwoFacilityTotalFlow = function (settings, updateCallback) {
        var self = this;
        var updateTimer = null;
        var currentSettings = settings;
        var errorStage = 0; 	// 0 =尝试标准请求
        // 1 =尝试JSONP
        // 2 =尝试thingproxy.freeboard.io
        var lockErrorStage = false;

        function updateRefresh(refreshTime) {
            if (updateTimer) {
                clearInterval(updateTimer);
            }
            updateTimer = setInterval(function () {
                self.updateNow();
            }, refreshTime);
        }

        updateRefresh(currentSettings.refresh * 1000);
        this.updateNow = function () {
            if ((errorStage > 1 && !currentSettings.use_thingproxy) || errorStage > 2) // We've tried everything, let's quit
            {
                return; // TODO: Report an error
            }
            var requestURL = currentSettings.url;

            //获取所有allcookies
            var allcookies = document.cookie;
            var arr = new Array();
            var access_token = window.sessionStorage.getItem('access_token');
            // "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/twoEquipments/getTwoEquipmentValue"
            // console.log('requestURL:', requestURL)
            $.ajax({
                async: false,
                url: "http://192.168.40.3:8181" + requestURL,
                // url: "http://"+baseURL+":"+basePort+"/camel/rest/dataPlatform/twoEquipments/getTwoEquipmentValue",
                dataType: "JSON",
                type: "GET",
                headers: {'access_token': access_token},
                // beforeSend: function(request) {
                //     request.setRequestHeader('access_token', access_token);
                // },
                success: function (data) {
                    // console.log(data);
                    var obj = JSON.parse(data);
                    updateCallback(obj);//回调函数
                    // console.log(obj)
                },
                error: function (xhr, status, error) {
                    if (!lockErrorStage) {
                        // TODO: Figure out a way to intercept CORS errors only. The error message for CORS errors seems to be a standard 404.
                        errorStage++;
                        self.updateNow();
                    }
                }
            });
        }

        function replace(a) {
            return a.replace(/'/g, '"')
        }

        this.onDispose = function () {
            clearInterval(updateTimer);
            updateTimer = null;
        }

        this.onSettingsChanged = function (newSettings) {
            lockErrorStage = false;
            errorStage = 0;

            currentSettings = newSettings;
            updateRefresh(currentSettings.refresh * 1000);
            self.updateNow();
        }
    };
    //两个重要设备总流量
    freeboard.loadDatasourcePlugin({
        // ** type_name **（必填）：此插件的唯一名称。此名称应尽可能唯一，以避免与其他插件发生冲突，并应遵循javascript变量和函数声明的命名约定。
        type_name: "两个重要设备总流量",
        settings: [
            {
                name: "url",
                display_name: "路径",
                // ** type **（必需）：此设置的预期输入类型。“text”将显示单个文本框输入。本文档中将包含其他类型的示例。
                type: "text"
            },
            {
                // ** name **（必填）：设置的名称。此值将在您的代码中用于检索用户指定的值。这应该遵循javascript变量和函数声明的命名约定。
                name: "use_thingproxy",
                // ** display_name **：调整此设置时将向用户显示的漂亮名称。
                display_name: "尝试代理",
                // ** description **：将在设置下方显示的文本，为用户提供任何额外信息。
                description: '首先将尝试直接JSON连接，如果失败，将尝试JSONP连接。如果失败，您可以使用thigPosiver，它可以解决API的许多连接问题。 <a href="https://github.com/Freeboard/thingproxy" target="_blank">更多信息</a>.',
                // ** type **（必需）：此设置的预期输入类型
                type: "boolean",
                // ** default_value **：此设置的默认值。
                default_value: true
            },
            {
                name: "refresh",
                display_name: "刷新时间",
                type: "number",
                // ** suffix **：后缀。
                suffix: "seconds",
                default_value: 5
            },
            {
                name: "method",
                display_name: "请求方式",
                // ** type **（必需）：option代表这是一个下拉选
                type: "option",
                options: [
                    {
                        name: "GET",
                        value: "GET"
                    },
                    {
                        name: "POST",
                        value: "POST"
                    },
                    {
                        name: "PUT",
                        value: "PUT"
                    },
                    {
                        name: "DELETE",
                        value: "DELETE"
                    }
                ]
            },
            {
                name: "body",
                display_name: "请求主体",
                type: "text",
                description: "请求的主体，通常只使用 POST"
            },
            {
                name: "headers",
                display_name: "请求首部",
                // ** type **（必需）：array代表这是一个数组
                type: "array",
                settings: [
                    {
                        name: "name",
                        display_name: "Name",
                        type: "text"
                    },
                    {
                        name: "value",
                        display_name: "Value",
                        type: "text"
                    }
                ]
            }
        ],

        newInstance: function (settings, newInstanceCallback, updateCallback) {
            newInstanceCallback(new jsonTwoFacilityTotalFlow(settings, updateCallback));
        }
    });

}());
